<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
   <script>
   //写一个sum方法，当使用下面的方法调用它正常工作
   console.log(sum(2,3));//5
   console.log(sum(2)(3));//5
   function sum(x){
     if(arguments.length==2){
         return arguments[0]+arguments[1];
     }else{
         return function(y){return x+y}
     }
   }
// 在JavaScript中，函数提供对参数对象的访问，该对象提供对传递给函
// 数的实际参数的访问。这使我们能够使用length属性在运行时确定传递
// 给函数的参数的数量
// 如果传递两个参数,我们只需将它们相加并返回。
// 否则，我们假设它是以sum(2)(3)的形式被调用的，所以我们返回一个
// 匿名函数，它将传递给sum() (在本例中为2 )的参数和传递给匿名函数
// 的参数(这种情况3)。
function sum(x,y){
    if(y!==undefined){
        return x+y;
    }else{
        return function(y){return x+y};
    }
}
// function sum(x, y){
// if (y !== undefined) {
// returnx+ y;
// }else {
// return function(y) {return X+ y; };
// 当函数被调用时，JavaScript不需要参数的数量来匹配函数定义中参数
// 的数量。如果传递的参数数量超过了函数定义中参数的数量，则超出的
// 参数将被忽略。另-方面，如果传递的参数数量少于函数定义中的参数
// 数量，则在函数内引用时，缺少的参数将具有未定义的值。因此，在上
// 面的例子中，通过简单地检查第二个参数是否未定义，我们可以确定函
// 数被调用的方式并相应地继续。

   </script>
</body>
</html>